23

» WarCraft 3 / vjass структуры, проблема наследования

Похожие вопросы:

ответ
стоп
а где заполнение массива структур?
мб все элементы массива одинаковы и ты просто инкриментишь одну и туже структуру 4 раза
создание структуры через статичный метод create идёт
ответ
В помощь тебе библиотеки(library) и базы данных.
Либы — для обращения по виду library_name.functionName(arguments)
Базы данных — для выделения юниту своих переменных.
С БД может быть момент не совсем понятным, поэтому скидываю пример:
Эта порнография разработана для личного пользования
У меня в коде есть иллюзия использования вжасса. Либа просто для доп табуляции и невостребованых манипуляций на случай импорта. При создании юнита ему присваивается ряд переменных, а номер этих переменных, относящихся к этому юниту, записывается в его(юнита) UnitUserData
library UnitDataBase
    globals
        constant integer       UnitDBSize = 512
        constant integer       UnitDBHeroesStart = 0
        constant integer       UnitDBHeroesUnder = 49
        constant integer       UnitDBUnitsStart = 50//Includes illusions of heroes. Or Should include them at least :P
        constant integer       UnitDBUnitsUnder = 319
        constant integer       UnitDBSummonsStart = 320
        constant integer       UnitDBSummonsUnder = 511
                 integer       UnitDBNextHero = 0
                 integer       UnitDBNextUnit = 50
                 integer       UnitDBNextSummon = 320
                 unit    array UnitDBUnit[UnitDBSize]
                 real    array UnitDBCurrentAnimationSpeed[UnitDBSize]
                 unit    array UnitDBForceAttackTarget[UnitDBSize]
                 integer array UnitDBAffectedByStuns[UnitDBSize]
                 real    array UnitDBMagicResistance[UnitDBSize]
                 real    array UnitDBPhysResistance[UnitDBSize]
                 real    array UnitDBCurrentArmor[UnitDBSize]//This armor does not include agility bonuses. Not used yet :>
                 real    array UnitDBWhiteMovementSpeed[UnitDBSize]
                 real    array UnitDBCurrentCustomSlow[UnitDBSize]
                 real    array UnitDBMagicDamageAmplifier[UnitDBSize]
                 real    array UnitDBPhysDamageAmplifier[UnitDBSize]
                 real    array UnitDBAdditionalHealth[UnitDBSize]//AKA Shield. Healed whenever unit takes damage.
        constant real          GravityAcceleration = 14.//Azeroth, bitch!
                 real    array UnitDBFlyingHeight[UnitDBSize]//Not used yet
                 real    array UnitDBFallingSpeed[UnitDBSize]
                 
                 integer array UnitDBItemUseVariable[UnitDBUnitsStart]//just don't ask
                 item    array UnitDBLastUsedItem[UnitDBUnitsStart]
                 real    array UnitDBCastPointX[UnitDBUnitsStart]
                 real    array UnitDBCastPointY[UnitDBUnitsStart]
                 
                 integer       UnitDBPreviousHero//Used for exitwhen event. Its next minus two.
                 unit    array UnitDBHeroHPBar[UnitDBUnitsStart]
                 unit    array UnitDBHeroMPBar[UnitDBUnitsStart]
                 unit    array UnitDBHeroSPBar[UnitDBUnitsStart]
    endglobals
    
    //Больно жирные для инлайна
    function UnitDBFindNextFreeVariable takes integer i returns integer
        local unit u
            loop
                set  u = UnitDBUnit[i]
                exitwhen u == null or GetUnitTypeId( u ) < 1
                set  i = i + 1
            endloop
        set  u = null
        return i
    endfunction
    
    function UnitDBAddHero takes unit u, real mdef, real armor returns nothing
        local integer i = UnitDBNextHero
        local real x = GetUnitX(u)
        local real y = GetUnitY(u)
            call UnitMakeAbilityPermanent( u, true, 'A00B' )
            set  UnitDBUnit[i] = u
            call SetUnitUserData( u, i )
            call GroupAddUnit( UnitsInPlayableArea, u )
            set  UnitDBItemUseVariable[i] = 0
            set  UnitDBCurrentAnimationSpeed[i] = 0.
            set  UnitDBAffectedByStuns[i] = 0
            set  UnitDBMagicResistance[i] = mdef
            set  UnitDBCurrentArmor[i] = armor
            set  UnitDBWhiteMovementSpeed[i] = GetUnitDefaultMoveSpeed( u )
            set  UnitDBCurrentCustomSlow[i] = 1.
            set  UnitDBMagicDamageAmplifier[i] = 1.
            set  UnitDBPhysDamageAmplifier[i] = 1.
            set  UnitDBFlyingHeight[i] = 0.//Doesn't include point height.
            set  UnitDBAdditionalHealth[i] = 0.
            /*if ( i == UnitDBHeroesUnder ) then
               call BJDebugMsg("|c00ff6060Hero limit reached! More heroes can be created, but things can go wild.")
            endif*/
            set  UnitDBNextHero = i + 1
            set  UnitDBPreviousHero = i - 1
            set  UnitDBHeroHPBar[i] = CreateUnit(BossPlayer1, 'hmil', x, y, 0. )
            call SetUnitAnimationByIndex( UnitDBHeroHPBar[i], 100 )
            set  UnitDBHeroMPBar[i] = CreateUnit( BossPlayer1, 'hrtt', x, y, 0. )
            call SetUnitAnimationByIndex( UnitDBHeroMPBar[i], 100 )
            set  UnitDBHeroSPBar[i] = CreateUnit( BossPlayer1, 'hwt2', x, y, 0. )
            call SetUnitAnimationByIndex( UnitDBHeroSPBar[i], 0 )
        set  u = null
        return
    endfunction

    function UnitDBAddUnit takes unit createdUnit, real mdef, real armor returns nothing
        local integer i = UnitDBNextUnit
        local unit u = UnitDBUnit[i]
            if ( u == null ) then
                set  i = UnitDBFindNextFreeVariable( UnitDBSummonsStart )
            endif
            set  UnitDBUnit[i] = createdUnit
            call SetUnitUserData( createdUnit, i )
            call GroupAddUnit( UnitsInPlayableArea, createdUnit )
            set  UnitDBCurrentAnimationSpeed[i] = 0.
            set  UnitDBAffectedByStuns[i] = 0
            set  UnitDBMagicResistance[i] = mdef
            set  UnitDBCurrentArmor[i] = armor
            set  UnitDBWhiteMovementSpeed[i] = GetUnitDefaultMoveSpeed( createdUnit )
            set  UnitDBCurrentCustomSlow[i] = 1.
            set  UnitDBMagicDamageAmplifier[i] = 1.
            set  UnitDBPhysDamageAmplifier[i] = 1.
            set  UnitDBFlyingHeight[i] = 0.
            set  UnitDBAdditionalHealth[i] = 0.
            if ( i < UnitDBSummonsUnder) then
                set  UnitDBNextSummon = i + 1
            else
                set  UnitDBNextSummon = UnitDBSummonsStart
            endif
        set  u = null
        set  createdUnit = null
        return
    endfunction
    
    function UnitDBAddSummon takes unit summonedUnit, real mdef, real armor returns nothing
        local integer i = UnitDBNextSummon
        local unit u = UnitDBUnit[i]
            if ( u == null ) then
                set  i = UnitDBFindNextFreeVariable( UnitDBSummonsStart )
            endif
            set  UnitDBUnit[i] = summonedUnit
            call SetUnitUserData( summonedUnit, i )
            call GroupAddUnit( UnitsInPlayableArea, summonedUnit )
            set  UnitDBCurrentAnimationSpeed[i] = 0.
            set  UnitDBAffectedByStuns[i] = 0
            set  UnitDBMagicResistance[i] = mdef
            set  UnitDBCurrentArmor[i] = armor
            set  UnitDBWhiteMovementSpeed[i] = GetUnitDefaultMoveSpeed( summonedUnit )
            set  UnitDBCurrentCustomSlow[i] = 1.
            set  UnitDBMagicDamageAmplifier[i] = 1.
            set  UnitDBPhysDamageAmplifier[i] = 1.
            set  UnitDBFlyingHeight[i] = 0.
            set  UnitDBAdditionalHealth[i] = 0.
            if ( i < UnitDBSummonsUnder) then
                set  UnitDBNextSummon = i + 1
            else
                set  UnitDBNextSummon = UnitDBSummonsStart
            endif
        set  u = null
        set  summonedUnit = null
        return
    endfunction
      
    //Система маг резиста была изменена на дефолтную, была введена аналогичная ей система физ урона.
    //Необходимо протестить эти системы на низких значениях. (могучий float и его точность). В нынешних условиях низкие значения не достигаются. На тест положен болт. Есть нерешенные проблемы с точностью(при восстановлении, опять же, резисты съезжают). Необходимо учитывать при вычислениях лишь первые три цифры после запятой, например.
    #define UnitDBIncreaseUnitMagicResistance( amount, userData ) = {
            set  UnitDBMagicResistance[userData] = UnitDBMagicResistance[userData] * amount
    }
    #define UnitDBDecreaseUnitMagicResistance( amount, userData ) = {
            set  UnitDBMagicResistance[userData] = UnitDBMagicResistance[userData] / amount
            if ( UnitDBMagicResistance[userData] > 0.99997 and UnitDBMagicResistance[userData] < 1.00003 ) then
                set  UnitDBMagicResistance[userData] = 1. 
            endif
    }
    #define UnitDBIncreaseUnitPhysResistance( amount, userData ) = {
            set  UnitDBPhysResistance[userData] = UnitDBPhysResistance[userData] * amount
    }
    #define UnitDBDecreaseUnitPhysResistance( amount, userData ) = {
            set  UnitDBPhysResistance[userData] = UnitDBPhysResistance[userData] / amount
            if ( UnitDBPhysResistance[userData] > 0.99997 and UnitDBPhysResistance[userData] < 1.00003 ) then
                set  UnitDBPhysResistance[userData] = 1. 
            endif
    }
    #define UnitDBReplaceUnitMagicResistance( before, after, userData ) = {
            set  UnitDBMagicResistance[userData] = UnitDBMagicResistance[userData] / before * after
    }
    #define UnitDBReplaceUnitPhysResistance( before, after, userData ) = {
            set  UnitDBPhysResistance[userData] = UnitDBPhysResistance[userData] / before * after
    }
    #define UnitDBIncreaseUnitMagicDamageAmplifier( amount, userData ) = {
            set  UnitDBMagicDamageAmplifier[userData] = UnitDBMagicDamageAmplifier[userData] + amount
    }
    #define UnitDBDecreaseUnitMagicDamageAmplifier( amount, userData ) = {
            set  UnitDBMagicDamageAmplifier[userData] = UnitDBMagicDamageAmplifier[userData] - amount
            if ( UnitDBMagicDamageAmplifier[userData] > 0.99997 and UnitDBMagicDamageAmplifier[userData] < 1.00003 ) then
                set  UnitDBMagicDamageAmplifier[userData] = 1. 
            endif
    }
    #define UnitDBIncreaseUnitPhysDamageAmplifier( amount, userData ) = {
            set  UnitDBPhysDamageAmplifier[userData] = UnitDBPhysDamageAmplifier[userData] + amount
    }
    #define UnitDBDecreaseUnitPhysDamageAmplifier( amount, userData ) = {
            set  UnitDBPhysDamageAmplifier[userData] = UnitDBPhysDamageAmplifier[userData] - amount
            if ( UnitDBPhysDamageAmplifier[userData] > 0.99997 and UnitDBPhysDamageAmplifier[userData] < 1.00003 ) then
                set  UnitDBPhysDamageAmplifier[userData] = 1. 
            endif
    }
    #define UnitDBIncreaseUnitShield( amount, userData ) = {
            set  UnitDBAdditionalHealth[userData] = UnitDBAdditionalHealth[userData] + amount
            //redraw
    }
    #define UnitDBDecreaseUnitShield( amount, userData ) = {
            set  UnitDBAdditionalHealth[userData] = UnitDBAdditionalHealth[userData] - amount
            if ( UnitDBAdditionalHealth[userData] < 0. ) then//Perhaps should be typed manually on every use. No need of that atm.
                set  UnitDBAdditionalHealth[userData] = 0.
            endif
            //redraw
    }
    function UnitDBAddUnitsCreatedOnInit takes nothing returns nothing
        local unit u = GetEnumUnit()
            if ( not IsUnitType( u, UNIT_TYPE_HERO ) ) then
                call UnitDBAddUnit( u, 1., 0. )//!!! whatever
            endif
        set  u = null
        return
    endfunction
    
endlibrary
ответ
allocate() используется внутри статичного метода и возвращает лишь индекс новой структуры
Технически верно, но на практике использовать .allocate() есть смысл только при перегрузке .create() (равно как и .deallocate() только при перегрузке .destroy()). Собственно, согласно документации, для того эти методы и существуют.
ответ
Напиши простейший код, скомпиль и посмотри во что превращается. Никаких структур в движке варика нет, вжасс это надстройка которая транспилит в обычный жасс.
ответ
- Я использую это:
struct linkedList
        private  static  constant  timer     period  =  CreateTimer( )
        private                    thistype  prev
        private                    thistype  next


        private stub method destroy takes nothing returns nothing

//          Здесь должен находится Ваш код.

            set  this.prev.next  =  this.next
            set  this.next.prev  =  this.prev

            if ( thistype( 0 ).next == 0 ) then
                call PauseTimer( thistype.period )
            endif

            call thistype.deallocate( this )
        endmethod


        private static method iterate takes nothing returns nothing
            local  thistype  this  =  thistype( 0 ).next

            loop
                exitwhen ( this == 0 )

//              Здесь должен находится Ваш код.

                call this.destroy( )

                set  this  =  this.next
            endloop
        endmethod


        private static method create takes nothing returns thistype
            local  thistype  this  =  thistype.allocate( )

            set  this.next         =  thistype( 0 )
            set  this.prev         =  thistype( 0 ).prev
            set  this.next.prev    =  this
            set  this.prev.next    =  this

//          Здесь должен находится Ваш код.
            
            if ( this.prev == 0 ) then
                call TimerStart( thistype.period, 0.03125, true, function thistype.iterate )
            endif

            return this
        endmethod


    endstruct
static method create takes nothing returns nothing
static method iterate takes nothing returns nothing
method destroy takes nothing returns nothing
Для работы этого двусвязного списка требуется создать 2-е переменные с именами next, prev.

23

» WarCraft 3 / Модели Юнита

Похожие вопросы:

ответ
Есть способность "Тёмный", если дать её юниту, то он заменится на юнит указанный в способности.У такого варианта наименьшее число неудобств.
ответ
Через триггеры и способности. Дать спосбность морфа и приказать ее использовать. Предварительно создать новую альтернативную единицу с другой моделью
Для героев:
Перевоплощение - Иллидан
Превратиться в кибергоблина (Проверено - работает)
ответ
В программе War3ModelEditor можно автоматически рассчитать границы. Но перед этим нужно вывести хотя бы одну точку на необходимое расстояние.
После чего точку можно удалить.
ответ
Nelloy, если найдёт где в памяти хранится модель после чего сам создаст модель из файла и заменит модель юнита на новую то можно
Pergin, гугли memory hack war3
это сложно и требует от тебя больших знаний в джасс и понимания работы движка игры
без этого даже не пытайся
либо делай через морф
как морфить одного юнита в другого написано в статьях
ответ
  1. Хорошая модель должна иметь минимальное необходимое количество полигонов. Что будет если заспавнить много юнитов можешь проверить и сам.
  1. 8 Мб - лимит для патчей до версии 1.26. В последнем патче карта может весить 100+ Мб. О скорости скачивания ничего не могу сказать.

23

» WarCraft 3 / Экран статистики

Похожие вопросы:

ответ
скопировать путь отсюда - дело 5 секунд

а так придется реимпортировать иконки в карту и писать им свой путь, в итоге вырастет вес
и никому это не нужно

23

» WarCraft 3 / Вопрос по Jass

Похожие вопросы:

ответ
Чтобы было норм читать, надо хотя бы выделять содержимое каждого блока (типа function/endfunction, if/endif, loop/endloop) табуляцией. Если блок внутри блока, то двойная табуляция, и т. д.
В vJASS и cJASS не стоит использовать одновременно C-подобный и Turing-подобный (стандартный JASS) синтаксис.
А если ты неправильно поставишь пробелы, запятые или кавычки, тебе об этом скажет парсер =)
ответ
Во-первых, что есть "локальный таймер" ? Это таймер записанный в локальную переменную?
Во-вторых, зачем тебе точка, если ты используешь XY ? Работай с ними
В-третьих, да. Использование в течении всей игры одной заранее созданной точки вызывает меньше нагрузки чем постоянно создание и удаление новых (кто-то там доказывал на примере и цифрами что от ремувнутых точке всё равно остаётся шлак в памяти...)
ответ
Всё, понял как сделать
ответ
Там до +50 не хватает скобки

23

» WarCraft 3 / Урон в зависимости характеристик

Похожие вопросы:

ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.

23

» WarCraft 3 / эффект

Похожие вопросы:

ответ
Карта с нестандартными молниями и описанием. Смотреть Readme в менеджере импорта.
Если тебе типа фиолетовой молнии рубика надо, то вот есть вроде этого
В эффектах молнии пишешь PISU
В менеджере импорта путь splats\lightningdata.slk
ответ
XGM Bot:
Похожие вопросы:

ответ

Проблема 4: Сброс анимации текстур

Если указываешь в настройках материала "Id анимации текстуры", то после сохранения этот параметр опять сбрасывается в "none".
Решение:
Сохранить в .mdl, открыть блокнотом. Ищем нужный материал, добавляем новую строчку TVertexAnimId и после пробела ставим id нужной анимации текстуры(обычно 0). Затем кодируем в mdx с помощью MdlVis.
Пример:
Material {
ConstantColor,
Layer {
FilterMode Transparent,
Unshaded,
TextureID 1
**TVertexAnimId 0**,
}
ответ
bazeba:
Ах да забыл написать, переливание электричества как у водяного элементаля, мне кажется эта текстура подходит
Вот вот как у водяного элементаля, открываешь эту модель и смотришь что и как там и все получится.
ответ
DarkRiset:
Darknessay:
Кажется ты не понимаешь, как работают фильтры альфы.
Не понимаю. Как раз поэтому и задал вопрос.
В ME открой модель. Там есть фильтры Addative и Add Alpha, которые работают схожим образом: чем темнее, тем прозрачнее(черный = 100%). Есть какой то альтернативный фльтр, вроде Modulate, который отображает белый как прозрачный. Посмотри в материалах(Window\Material manager\).
Это касательно отображения.
А ошибка скорее всего не в том, но попроси изменить эффект того, кто в этом шарит, ведь если она выбивает после того, как его редактировал ты, значит ты где то напартачил.)
ответ
ClotPh,
  1. открыть модель в моделедиторе
  2. окна -> редактор узлов
  3. там найти все источники частиц (у них иконки в виде синих/красных стрелочек)
  4. два раза щелкнуть на источник, откроется окно редактирования
  5. там обычно три цвета, вот их можно поменять нажав на кнопку "..." рядом с каждым, открывается цветовой диалог; еще в этом окне можно посмотреть/поменять текстуру источника
ответ
Смею предположить, что все что ниже уровня моста на скринах - декор под пустой текстурой (альфа-тайл)

ответ
zontik2012 нет, не является утечкой. Если бы ты крепил эффект к точке, к примеру в позиции юнита, причем не удалял бы эту точку потом - то это была бы утечка
ответ
В триггере с инициализацией создаешь действие: Игрок - make Ю2 недоступно for training by игрок.
Создаешь триггер: юнит завершает исследование (твой аналог берсерка) - заблокировать Ю1 (как в пункте 1), а Ю2 - разблокировать.
Создаешь способность на основе Безумие (Sbsk), указываешь в графе "новый тип войск" Ю2, даешь эту способность Ю1.

23

» WarCraft 3 / Вода

Похожие вопросы:

ответ
похоже что придется делать обычный блокиратор путей, а для посадки можно просто повысить радиус действия данной способности, чтобы она была дальше самого тонкого блокиратора пути. Теоретически должно сработать
ответ
напиши мне
Тебе описали несколько алгоритмов решения возникшей задачи и средства, с помощью которых они могут быть реализованы; реализация решения остаётся за тобой как за тем, у кого эта задача возникла.
Ты также можешь отказаться от решения задачи, но не имеешь никакого морального права требовать реализовать это решение за тебя.

Как вариант - покрасить всю глубокую воду определённым тайлом и отлавливать именно его.
Если по-умолчанию карта была создана с глубокой водой, то вот.
native GetTerrainCliffLevel takes real x, real y returns integer
Подсказка:
PATHING_TYPE_AMPHIBIOUSPATHING
PATHING_TYPE_WALKABILITY

native IsTerrainPathable takes real x, real y, pathingtype t returns boolean
Берёшь координаты, или точку (одно и другого получить можно, в обе стороны)
Проверяешь подходит ли точка для плавания
Если да - то это либо мелководье, либо глубоководье
Проверяешь подходит ли точка для ходьбы
Если нет - это глубоководье, если да - это мелководье
Далее ты можешь ещё проверить уровень склона (клифф) в точке, но проверки на проходимость и так должно быть достаточно... проверкой уровня ты лишь получишь то на какой высоте эта вода... (а она может быть на разных высотах).
ответ
Можно ли менять уровень рельефа (аналог действия +/- 1-2 в Редакторе Рельефа) триггерами или джасс?
И аналогичный вопрос про воду. Можно?
Нельзя менять ни уровни склонов, ни уровень воды. Можно только уровень земли менять. (Типа как просто «повысить/понизить» в редакторе.)
ответ
Почему то на таймере всё забагалось и прилетало по несколько ивентов, сделал на периодическом триггере и всё стало нормально.
Код
globals
    region region123
    trigger trg = CreateTrigger()
    real maxX
    real minX
    real maxY
    real minY
    real pointX
    real pointY
endglobals

function Run takes nothing returns nothing
    if pointY < minY then
        call TriggerRegisterEnterRegion( gg_trg_enter, region123, null )
        call TriggerRegisterLeaveRegion( gg_trg_leave, region123, null )
        call DisableTrigger( trg )
    endif
    if pointX > maxX then
        set pointY = pointY-32.00
        set pointX = minX
    endif
    if IsTerrainPathable(pointX, pointY, PATHING_TYPE_FLOATABILITY) == false then
        call RegionAddCell( region123, pointX, pointY )
    endif
    set pointX = pointX+32.00
endfunction

function Trig_trg_Actions takes nothing returns nothing
    set region123 = CreateRegion()
    set maxX = GetRectMaxX(bj_mapInitialPlayableArea)
    set minX = GetRectMinX(bj_mapInitialPlayableArea)
    set maxY = GetRectMaxY(bj_mapInitialPlayableArea)
    set minY = GetRectMinY(bj_mapInitialPlayableArea)
    set pointX = minX
    set pointY = maxY
    
    call TriggerRegisterTimerEvent( trg, 0., true )
    call TriggerAddCondition( trg, Condition(function Run) )
endfunction

//===========================================================================

function InitTrig_trg takes nothing returns nothing
    call Trig_trg_Actions()
endfunction
Вот карта с примером (карту сохранить не сможешь, т.к тебе нужен будет JNGP, это просто чтобы ты посмотрел сам алгоритм)
И учти что чем больше карта, тем больше времени нужно алгоритму что построить регион

23

» WarCraft 3 / Вопрос по заданиям.

Похожие вопросы:

ответ
The Dude, это несерьезно. Все вопросы описаны в большом количестве статей здесь, на нашем сайте - xgm.guru/p/wc3/articles. То, что перечисляешь не верх мастерства WE, а базовые знания. Материалов предостаточно. Успехов в обучении.
ответ
Ты не представляешь, сколько раз он был задан. Я уверен, ты сам справишься с поисками.
ответ
Скачай и максимальный размер карты в этой программе будет 480*480. xgm.guru/p/wc3/jassnewgenpack-r
ответ
Нет, ты создаешь квест для всех, потом скрываешь их, редактируешь как хочешь и показываешь их нужному игроку т.е GetLocalPlayer().

23

» WarCraft 3 / Вопрос про облости

Похожие вопросы:

ответ
как и со всеми остальными объектами при правильном использовании утечек нету
при неправильном утечек дофига
а так утечки можно наплодить чем угодно кроме чисел, буленов и игроков

23

» WarCraft 3 / Пассивная способность героя

Похожие вопросы:

ответ
Хозяин Миров:
Вот. Только совмещение нерабочее получилось, но оставил пока что.
ответ
Когда юнит проучивает пассивку, добавляй в группу юнита, который выучил пассивку. Дальше все просто -
Юнит умирает
Киллинг юнит в нашей группе - да
Дайинг юнит не в команде владельца киллинг юнит.
Игрок - адд проперти - 500 золото (овнер оф киллинг юнит)
ответ
На основе полностью триггерного снаряда, сделанного из работника (если вам так интересно).
Если сало выучит глейвы, то будет получать бонусы интелекта (если мне не изменяет память), сам снаряд тупо юнит которого двигают с сайленсером и проверяют жив ли он.
Могу выложить код сайленсера.
ответ
возможные способности, господи, строчка выше, вы хотяб проверяли все сами а не ждали иисуса с небес
там даже подпись категории - способности
ответ
триггерно пассивки делай
иначе никак

23

» WarCraft 3 / Скелеты из атаки

Похожие вопросы:

ответ
Экстрасенсы чувствуют что ты шаришь только в GUI, так что замути абилку на основе канала с временем каста 2.33 и нужной анимацией. Она, правда, как-то хреново взаимодействует со станами - не кислотной бомбой (или че-то такое, никогда не сталкивался, пофиг), но послужит тебе верно. При спавне просто кастуй абилку.
ответ
Да сделай проще. Создай многоуровневую способность-пустышку. и когда отдаешь приказ атаковать в область, давай ему эту способность и с помощью неё отслеживай, какую область атаковать.
Например,
способность уровень 1, значит атаковать должен 1 область.
Уровень 2 - 2 область и т. д.
Не вижу смысла усложнять жизнь с хеш-таблицей.
Надеюсь понятно?) Отдал приказ, присвоил способность, после каста жди пару сек и в зависимости от уровня способности-пустышки отправляй в ту или иную область.

23

» WarCraft 3 / Заговор неуязвимости не работает у здания

Принятый ответ
Похожие вопросы:

ответ
Я припоминаю как сталкивался с таким. Скорее всего это не лечится. Можно попробовать создавать даммика на месте здания и заставлять его использовать заклинание. Или даже полностью самому написать спелл - он довольно прост.
ответ
Не берите вы эти ульты для основы своих скиллов, они сделаны через одно место лиж бы работали в капмании, а там дальше хоть потоп.
Сделайте заклинание из канала, а юнитов вокруг делайте неуязвимыми.

23

» WarCraft 3 / 2 цифры урона

Похожие вопросы:

ответ
ответ
Атака оглушением вызывает подобную ерунду. Да и не только.
Например в доте бы вылетало сообщение 0 при атаке имея МКБ - сообщался бы урон, урон от микробаша, если бы выпал и 0.00 от нулевого критического удара.
Решение простое - поставь условие, что полученный урон больше 0.00, тогда только выводить.
ответ
Нужно менять 'AHtb' - это код способности (соответственно - молот бурь). Сюда нужно вставить код своей способности.
Ctrl+D в РО отображает коды.
А может и не Ctrl+D, но будет прикольно, если я вспомнил.
ответ
Ну это сплеш, на тип урона не проверял, область настраивается и кол-во урона, оно же урон по аое.
Не все, а орбы предметов, орб может включить вторую атаку героя, только если она изначально выключена и есть. По этой причине владельцы орбов порой считаются юнитами дальнего боя, что разумеется не так (вторая атака всегда атака дальнего боя у всех дефолтных героев в варкравте, особо вторую атаку никто не настраивает.)
В орбах вроде сферы огня нету ничего интересного или полезного, лучше делать руками те эффекты которые они дают.

23

» WarCraft 3 / Особый персонаж

Похожие вопросы:

ответ
1 - не стоит создавать отдельный триггер для способности с периодом в 0.5 секунды
2 - об утечках триггера 003 не говорю, думаю сам знаешь
3 - второй триггер очевидно у тебя не работает? Потому что Triggering Unit'а просто нет в событии

Что я тебе предлагаю:
В первом триггере все тоже собитие\условие, в действии повышатьуроверь способности на базе Жара прейсподней(пассивного), ну конечно поменяешь в РО эффекты и др. И по истечении времени менять уровень на 1 этой способности. Как сделать чтоб не было видно иконки этого Жара? Добавляешь её в спец.созданную Книгу заклинаний и триггерно, к примеру на Map Init запрещаешь использовать игроку эту Книгу заклинаний.
ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
ответ
"Далеко твоя рпг не уйдёт" моя рпг тебя переживет.
Ты тоже когда родился не умел так нагло хамить незнакомым людям, научился же как то. Люди с более серьезным отношением к миру чем "изменить систему один не могу но буду плакать об этом" могут изучить все что захотят и даже в одиночку будут стоить больше чем тысяча "всегда сдающихся" людей,
и тот человек (Да удалось, даже был лаунчер для этой игры. Forgotten Land) это подтвердил, хотя я уверен что он быстро опустил руки.
p.s чел прекращай настраивать других людей на поражение, если ты что-то можешь дать - дай, если хочешь чтобы другие не добились успеха чтобы ты оказался прав и не чувствовал себя ущербным то просто отойди в сторону.
Я на все твои выпады отвечу лишь одной фразой:
"Dota была обычной картой для warcraft 3 и она поначалу тоже была пустой ".
Ответы получены, пару шарящих людей нашел, (дай бог каждому такого человека который рассказал мне о многом что тут считают до сих пор невозможным)
Спасибо за поддержку! и особенно одному пользователю. Ведь именно благодаря таким людям как life2smiler, люди не делают хорошие проэкты а другие люди соответственно вынуждены играть в некачественные карты и в течении нескольких лет не находить решения наболевших проблем
(если нет хотя бы 1 го человека кому удалось сделать что-то необычное то все остальные продолжат считать это невозможным) А сегодня стало ясно что могут не знать о чем либо не только потому что никто не делал этого, а потому что человек на самом деле сделал но никому говорить не стал :)
ответ
Обращение ко всем, вопрос закрыт наилучшим образом, ничьи услуги больше не требуются.

23

» WarCraft 3 / Сделать берсерка доступным

Похожие вопросы:

ответ
поставить в РО у юнита "требования" на технологию, и теперь пока она не изучена, они не будут доступны. И может быть еще способностях надо будет покопаться и в технологиях

23

» WarCraft 3 / Проблема с редактором

Похожие вопросы:

ответ
Вот скрин всего
У вас открыт Jass New Gen Pack.
Tumart:
При выборе действия в гуи надо выбрать Custom Script он же(JassCode).
ответ
да я решыл проблему я просто перегрузил комп
Я понел в чом проблема я поставил в vjass 2 галки нижние включил из надо отключать и тогды проблем не будет
ответ
XGM Bot:
Похожие вопросы:

ответ
советую переименовать модель\заребутить комп
текстуры стандартные юзал, я так понимаю

ответ
Slice_Of_Spice:
ssbbssc, понятия не имею, почему он так обозвал экзешник редактора. Может из-за ЖНГП. Если ты про версию варика, то она 1.26.
С другими моделями всё ок? Если да, то копай модель, нарушил правила какие-то. Пересобери её заного)
ответ
Проблема решена. Я сделал так: Удалил все триггеры и потом по папочке восстанавливал, когда нашли в чем проблема удалили триггер и все заработало, спасибо за помощь!

23

» WarCraft 3 / Вопрос по Jass

Похожие вопросы:

ответ
Чтобы было норм читать, надо хотя бы выделять содержимое каждого блока (типа function/endfunction, if/endif, loop/endloop) табуляцией. Если блок внутри блока, то двойная табуляция, и т. д.
В vJASS и cJASS не стоит использовать одновременно C-подобный и Turing-подобный (стандартный JASS) синтаксис.
А если ты неправильно поставишь пробелы, запятые или кавычки, тебе об этом скажет парсер =)
ответ
Во-первых, что есть "локальный таймер" ? Это таймер записанный в локальную переменную?
Во-вторых, зачем тебе точка, если ты используешь XY ? Работай с ними
В-третьих, да. Использование в течении всей игры одной заранее созданной точки вызывает меньше нагрузки чем постоянно создание и удаление новых (кто-то там доказывал на примере и цифрами что от ремувнутых точке всё равно остаётся шлак в памяти...)
ответ
nvc123:
ответ - в структурах не должно быть глобальных переменных
Ответ неверен. Внутри структуры не может быть блока globals, потому что это бессмысленно: все поля в структуре уже являются глобальными переменными.
struct MyStruct
    unit u // На самом деле будет создан глобальный массив юнитов.
    static unit u2 // Будет создана 1 глобальная переменная типа юнит.
endstruct

Skolz:
тема ещё не закрыта. Мне нужен ответ. А не статьи
Читай статьи и тестируй сам. Так получишь ответы на многие вопросы.
ответ
Всё, понял как сделать

23

» WarCraft 3 / Удалить предметы в области

Похожие вопросы:

ответ
перемещать
при создание идёт выделение памяти а при перемещение лишь изменение полей объекта
но всё зависит от интервала и количества предметов
ибо уже при 400 предметах бывают лаги
ответ
Frozen_Cat, тут 2 варианта:
  • нужна система отлова и дифференциации урона. Это в случае если сайленс должны при применении исключительно дамажащих спеллов.
  • нужна система детекта текущей цели юнита. В случае, когда сайленс должен получать любой юнит, применивший любое заклинание против героя.
ответ
Custom, Никак, HeroAbilityList низя править во время игры, делайте несколько героев с разными наборами скиллов на изучение, а потом морфите.
Как правильно морфить можно найти инфу тут.
Перед морфом желательно убирать все предметы из инвентаря.
ответ
Код выше имеет вероятность вызвать фатал (от драколича инфа, что из-за чтения памяти по несуществующему адресу, я пока отталкиваюсь от того, что из-за несуществующей точки мб втч).
Уже был промежуточный вариант номер 2, он фатал вызвал сразу после сборки линзы, что подтверждает отчасти моё мнение...
Сейчас тестирую этот. По крайней мере линза с ним собралась уже без фатала.
Новый тест код линзы (ща главное, чтобы работал)
ЭФИРНАЯ ЛИНЗА
function AetherLens_Actions takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6, p, p2
local unit u5 = GetTriggerUnit()
local unit u6 = GetSpellTargetUnit()
local integer a = GetUnitAbility(u5,GetSpellAbilityId())
local location p = GetUnitLoc(u5)
local location p2
local integer i = 0
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
ЭФФЕКТЫ, ОБСЧЕТ И ДОБАВКА РЕНДЖА
if (u6 != null) then
set p2 = GetUnitLoc(u6)
else
if GetSpellTargetLoc() != null then
set p2 = GetSpellTargetLoc()
endif
endif
if p2 != null then
if ( UnitHasItemOfTypeBJ(GetTriggerUnit(), 'I01O') == true ) then
if DistanceBetweenPoints(p,p2) > 200 then
call SetUnitState(u5, UNIT_STATE_MANA, GetUnitState(u5, UNIT_STATE_MANA) + DistanceBetweenPoints(p,p2) * 0.04)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIma\\AImaTarget.mdl",u5,"chest"))
if GetAbilityDataHeroRng(a, i) > 200 and GetAbilityDataHeroRng(a, i) < 1000 and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
set i = GetAbilityMaxLevel(GetSpellAbilityId()) + 1
loop
exitwhen i < 1
set i = i-1
call SetAbilityDataHeroRng(a,i,GetAbilityDataHeroRng(a, i) + 50)
endloop
endif
endif
endif
call RemoveLocation (p2)
endif
ЭФФЕКТЫ, ОБСЧЕТ И ДОБАВКА РЕНДЖА - ЗАКРЫТО.
call RemoveLocation (p)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, u6, p, p2
set u5 = null
set u6 = null
set p = null
set p2 = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
===========================================================================
function InitTrig_AetherLens takes nothing returns nothing
local trigger AetherLens = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( AetherLens, EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddAction( AetherLens, function AetherLens_Actions )
set AetherLens = null
endfunction
ЭФИРНАЯ ЛИНЗА - ЗАКРЫТО.
Если что: в первичном коде не было вообще предусмотрено, что точки p2 может не существовать и что в таком случае делать.
ответ
nvc123, если честно мне его действия очень напоминают хитрое попрошайничество. Да и на сайте тем по типу - "Как посчитать количество предметов в области" уже штук 3-4 было. Да и я бы ему рекомендовал провернуть такой трюк сначала с одним предметом а потом понять принцип и склепать по аналогии еще сколько нужно раз. И не проще ли сделать 1 круг для все этих 10 предметов и рядом круг для жертвы?

23

» WarCraft 3 / Не открывается карта

Похожие вопросы:

ответ
Я не уверен, но возможно функция DestroyTrigger есть в JNGP 5d exp.2, но нет в JNGP твоего друга? Пусть он попробует открыть карту в JNGP 5d exp.2.
ответ
Варианта два - допротектили карту либо у тебя преаддоненый варик. Чаще встречается первое.
ответ
во первых: не надо дублировать вопросы
во вторых: у меня твоя карта открывается
правда я не настолько сумасшедший чтобы юзать вин10
в третьих: размер мапы большой и может тупо не хватать памяти (особенно если юзаешь вин10)
советую попробовать переустановить jngp
если не поможет то сменить винду
ответ
Steal nerves:
JNGP снимает ограничения (например максимум декорации 20к), если обычным редактором открыть критует. В jngp есть новые гуишные функции, которых нет в обычном, стандартный редактор их не распознает. Юзайте поиск, такой вопрос уже задавали
можно вместо новых триггерных команд юзать нативки. Писать например через Custom Script или вообще на jass
ответ
Думаю, тебе стоит подробней описать проблему в этом ресурсе.

23

» WarCraft 3 / Оптимизация моделей

Похожие вопросы:

ответ
Нашел! добавил! Тест, все хорошо! Пока, еще повтор проверяет!
Недостающий прелоад, Red_Glow3.blp и Dust5A.blp , также Clouds8x8.blp и ShockwaveWater1.blp и EQ_Rock2.blp
	call Preload( "Textures\\Red_Glow3.blp" )
	call Preload( "Textures\\Dust5A.blp" )
	call Preload( "Textures\\Clouds8x8.blp" )
	call Preload( "Textures\\ShockwaveWater1.blp" )
	call Preload( "Textures\\EQ_Rock2.blp" )
ответ
При определенных навыках даже в War3 Model Editor можно серьезно облегчить модель. Можно полюбопытствовать о том, что это за модель? Возможно решение гораздо проще, чем тебе кажется.
Нужен набор программ виз,в3ме, блплаб, фотошоп, текстовый редактор - самый хороший результат, но нужны определенные навыки,
ответ
При конвертации моделей из игр в MDX их вес велик как и вес их текстур ! Я оптимизирую и сжимаю модель через MDLvis а текстуры через BLP Laboratory но их вес все еще внушителен ( Есть ли другие варианты среза веса без дефектов материала ?
Нет. Только удаление лишних анимаций. Остальную оптимизацию веса сделает mdlvis.
При импорте некоторых моделей в карту возникает проблема с их выбором при манипуляции ( Передвижения ) словно их Выбор отсутствует , Думаю некоторые с подобным сталкивались ...
Если модель нельзя выделить в игре курсором, у неё отсутствуют collision shapes (формы коллизии). Их можно добавить в War3ModelEditor -> Окна -> Редактор узлов -> правый клик -> Создать форму - > отредактировать размеры и положение. Их можно добавить несколько, чтобы покрыть модель целиком. Они отвечают за взаимодействие модели с курсором.

Один ресурс - один вопрос, после пойдут замечания.
ответ
8gabriel8, Вот, упрямый ведь! Берёшь скачиваешь свою модель, которую ты кинул в топик, рассчитываешь границы, импортируешь, для точности в новую карту 32x32 и если после этого портрет невидим, я в блоге напишу, что я гей. Конечно при условии, что ты все правильно сделаешь.
ответ
  1. Хорошая модель должна иметь минимальное необходимое количество полигонов. Что будет если заспавнить много юнитов можешь проверить и сам.
  1. 8 Мб - лимит для патчей до версии 1.26. В последнем патче карта может весить 100+ Мб. О скорости скачивания ничего не могу сказать.

23

» WarCraft 3 / wow в warcraft

Похожие вопросы:

ответ
Во время беты ВоД уже был конвертер, позволяющий перегонять модели и объекты из 6.х в 3.3.5
Ну а из него, конвертировать в мдх - дело обычное.
ответ
Какая-то особая кодировка звука должна быть, битрейт и прочее или что?
так и есть
ответ
а ты уверен что в папке есть файлы в формате mpq?
ну а вообще мы не телепаты чтобы так сказать в чём проблема
больше инфы
скрины, версия студии, ос
так же попробуй открыть архивы в другом архиваторе
например в mpqMaster
ответ
повторю опять свой вопрос
у тебя в папке есть файлы формата mpq?
если есть то открой их другим архиватором
если нету то это твои проблемы и никто тебе не поможет
ответ
Иконку приклеить сразу в вопрос религия не позволяет?)
Этой иконки в стандартных MPQ нет, её нужно импортировать.

23

» WarCraft 3 / Проблема с анимациями

Похожие вопросы:

ответ
nvc123:
Nyanta, для начала дебаг сделать как написано в статье
Сделал. Триггер работает как нужно. При входе всегда пишет "Вход!", при выходе - "Выход!". Порядок текста не меняется.
В общем, проблема, почему-то, была в названии анимации. Открыл модель через MdlVis и назвал анимации "родными" словами Stand, Walk, Death. Стало работать как надо.
Спасибо Rare за
Rare:
ставь скорость анимации на 0%
И nvc123 за то, что натолкнул на мысль этим)
nvc123:
конфликт триггеров,неправильный проигрыш анимаций
ответ
Чтобы при подборе меча игрались анимации для меча - можно укзать
Анимация - add animation tag to unit - first например. Будут проигрываться attack first, walk first и т.д. При отсутствии таковых будут играться бестеговые анимации.
Теги не какие попало добавляются, насколько я помню.
Используемые теги: fast, victory, first, second,third, fourth, fifth, swim, ready, alternate.
ответ
Ошибка при работе с MdlVis. Попробуй открыть модель в версии 1.40, там должно изменение видимости в ключевых кадрах должно заработать. Однако советую сделать копию модели, т.к. 1.40, если не изменяет память, ломает уже настроенную видимость.
ответ
Лучше проверить, присоединён ли он к тем же костям, что и соседние вершины. Если нет — присоединить. Если да, то как сказали Melissa и nvc123.
ответ
Анимация кости базы при death сместилась у конечной точки в линейке анимации. Поправил. В игре потестил, работает. Рассчитать границы нужны когда делаешь новые или изменяешь старые анимации, одна из причин чтоб анимация не сместилась и была на своем месте. Но в твоем случае она сразу не помогла.